package com.intelligent.service;

import com.intelligent.entity.Notice;
import com.intelligent.dto.NoticeCreateDTO;
import com.intelligent.dto.NoticeQueryDTO;
import com.intelligent.dto.NoticeDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

/**
* @author lenovo
* @description 针对表【notice(通知信息表)】的数据库操作Service
* @createDate 2025-09-02 11:43:28
*/
public interface NoticeService extends IService<Notice> {

    /**
     * 创建通知
     * @param createDTO 创建DTO
     * @return 通知ID
     */
    Integer createNotice(NoticeCreateDTO createDTO);

    /**
     * 更新通知
     * @param createDTO 更新DTO
     * @return 是否成功
     */
    Boolean updateNotice(NoticeCreateDTO createDTO);

    /**
     * 分页查询通知
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    IPage<NoticeDTO> pageNotices(NoticeQueryDTO queryDTO);

    /**
     * 获取用户的通知列表
     * @param userId 用户ID
     * @param queryDTO 查询条件
     * @return 通知列表
     */
    IPage<NoticeDTO> getUserNotices(Long userId, NoticeQueryDTO queryDTO);

    /**
     * 标记通知为已读
     * @param noticeId 通知ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean markAsRead(Integer noticeId, Long userId);

    /**
     * 获取用户未读通知数量
     * @param userId 用户ID
     * @return 未读数量
     */
    Integer getUnreadCount(Long userId);

    /**
     * 发布通知
     * @param noticeId 通知ID
     * @return 是否成功
     */
    Boolean publishNotice(Integer noticeId);

    /**
     * 删除通知
     * @param noticeId 通知ID
     * @return 是否成功
     */
    Boolean deleteNotice(Integer noticeId);

    /**
     * 批量标记为已读
     * @param noticeIds 通知ID列表
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean batchMarkAsRead(List<Integer> noticeIds, Long userId);
}
